package org.hujunfeng;

import java.io.IOException;
import java.net.*;

/**
 * 关闭服务器运行的工具类
 */
public class CloseTool {

    /**
     * 可以从main方法中传入参数
     * -p 服务器关闭端口
     * -h 服务器的IP地址
     * @param args
     */
    public static void main(String[] args) {

        // 默认端口
        int shutdownPort = 8081;

        // 默认服务器的主机地址
        String host = "127.0.0.1";

        // args[0] 是程序名字；
        if (args.length > 1){
            for (int i = 0; i < args.length; i++){

                // 设置端口号
                if (args[i].equals("-p")) {
                    if (args.length > i + 1 && !args[i + 1].equals("")){
                        shutdownPort = Integer.parseInt(args[i + 1].trim());
                        i++;
                    } else {
                        try {
                            throw new Exception("-p is miss argument value.");
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }

                // 设置地址
                if (args[i].equals("-h")){
                    if (args.length > i + 1 && !args[i + 1].equals("")) {
                        host = args[i + 1].trim();
                        i++;
                    } else {
                        try {
                            throw new Exception("-h is miss argument value.");
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }

        try {
            InetAddress address = InetAddress.getByName(host);

            // 1、建立UDP客户端
            DatagramSocket client = new DatagramSocket();

            // 0x1代表关闭。
            byte[] data = new byte[]{0x1};

            // 2、创建数据包
            DatagramPacket packet = new DatagramPacket(data, 0, data.length, address, shutdownPort);

            // 3、发送
            client.send(packet);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
